home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
World of Amiga
/
World of Amiga.iso
/
archive
/
assembly
/
b-block1.lha
/
Trackloader2.s
< prev
Wrap
Text File
|
1980-01-01
|
4KB
|
227 lines
ùúùúÿÙpOÿÙpOÿÙpOÿÙpOÿÙpOÿÙpOÿÙpOÿÙpOÿÙpO section main,Code_C
DiskBuf = $7b000
Blocksize = 512
j:
lea DiskDemo(pc),a0
move.l a0,$80
trap #0
rts
DiskDemo:
movem.l d0-d7/a0-a6,-(a7)
lea $30000,a0
moveq #01,d0
moveq #01,d1
bsr Trackloader
movem.l (a7)+,d0-d7/a0-a6
rte
DMA_ReadBytes = [($440*11+Gap_len)/2]+2
Drive = 0
MAX_HeadMoves = 2
MAX_ReadTries = 10
WaitBlitt: Macro
\@1:
btst #6,$2(a6)
bne.s \@1
ENDM
Trackloader:
subq.w #1,d1
bmi.s LT_LoadDone
bsr.b LT_MoveHead
LT_LoadLoop:
moveq #MAX_HeadMoves,d6
bra.s LT_NoHead
LT_HeadRetry:
bsr.b LT_MoveHead
LT_NoHead:
moveq #MAX_ReadTries,d5
LT_ReadRetry:
bsr.w LT_ReadTrack
bsr.w BlitDecode
move.b (a4),d7
beq.s LT_MoreMore
dbf d5,LT_ReadRetry
dbf d6,LT_HeadRetry
move.w #$4444,d7
LT_WasError:
move d7,$dff180
dbf d7,LT_WasError
LT_MoreMore:
lea $1600(a0),a0
addq.w #1,d0
bchg #2,(a5)
btst #0,d0
bne.s LT_Load2
bclr #1,(a5)
bclr #0,(a5)
nop
bset #0,(a5)
bsr.b LT_TIME
LT_Load2:
dbf d1,LT_LoadLoop
bsr.b LT_Leaver
LT_LoadDone:
movem.l (a7)+,d0-d7/a0-a6
rts
ReadError: dc.w 0
LT_MoveHead:
lea $bfd100,a5
move.b #$7f,(a5)
nop
bclr #Drive+3,(a5)
nop
LT_MH0:
btst #5,$f01(a5)
bne.s LT_MH0
LT_Move2Zero:
btst #4,$f01(a5)
beq.s LT_HeadAtZero
bclr #0,(a5)
nop
bset #0,(a5)
bsr.b LT_TIME
bra.s LT_Move2Zero
LT_HeadAtZero:
bset #2,(a5)
moveq #0,d2
move.b d0,d2
lsr.w #1,d2
bcc.s LT_HeadOK
bclr #2,(a5)
LT_HeadOK:
subq.w #1,d2
bmi.s LT_HeadMoved
bclr #1,(a5)
LT_MH1:
bclr #0,(a5)
nop
nop
bset #0,(a5)
bsr.b LT_TIME
dbf d2,LT_MH1
LT_HeadMoved:
rts
LT_Leaver:
move.b #$fd,(a5)
nop
bset #Drive+3,(a5)
nop
bset #0,(a5)
rts
LT_TIME:
moveq #64,d7
bsr.b TimeWait
rts
TimeWait:
movem.l d1/d2,-(a7)
TimeWait0:
move.w $dff006,d1
lsr.w #8,d1
TimeWait1:
move.w $dff006,d2
lsr.w #8,d2
cmp.w d1,d2
beq.s TimeWait1
dbf d7,TimeWait0
movem.l (a7)+,d1/d2
rts
LT_ReadTrack:
lea $dff000,a6
move.w #$7f00,$9e(a6)
move.w #$8500,$9e(a6)
move.w #$4489,$7e(a6)
move.w #$8210,$96(a6)
LT_RT0:
btst #5,$f01(a5)
bne.s LT_RT0
move.w #$4000,$24(a6)
move.l #DiskBuf,$20(a6)
move.w #$8000+DMA_ReadBytes,d2
move.w d2,$24(a6)
move.w d2,$24(a6)
move.w #$2,$9c(a6)
LT_RT1:
btst #1,$1f(a6)
beq.s LT_RT1
move.w #$4000,$24(a6)
move.w #$0400,$9e(a6)
rts
BlitDecode:
movem.l d0-d7/a0-a6,-(a7)
move.l #$55555555,d4
lea $dff000,a6
lea DiskBuf,a1
moveq #10,d7
Blit_Dec0:
cmp.w #$4489,(a1)+
bne.s Blit_Dec0
cmp.w #$4489,(a1)
bne.s Blit_Dec1
addq.l #2,a1
Blit_Dec1:
bsr.b Blit_CheckBlock
move.b d0,(a4)
bne.s Blit_Error
movem.l (a1),d2/d3
and.w d4,d2
and.w d4,d3
add.w d2,d2
or.w d3,d2
lsr.w #8,d2
lsl.w #8,d2
add.w d2,d2
lea (a0,d2.w),a2
lea 56(a1),a1
bsr.b Blit_DoBlit
subq.l #1,a1
dbf d7,Blit_Dec0
Blit_Error:
movem.l (a7)+,d0-d7/a0-a6
rts
Blit_DoBlit:
WaitBlitt
move.w #$8640,$96(a6)
move.l #$1dd80002,$40(a6)
move.l #$ffffffff,$44(a6)
moveq #0,d2
move.l d2,$62(a6)
move.w d2,$66(a6)
move.w d4,$70(a6)
lea BlockSize-1(a1),a1
move.l a1,$50(a6)
lea BlockSize(a1),a1
move.l a1,$4c(a6)
lea BlockSize-1(a2),a2
move.l a2,$54(a6)
move.w #$0808,$58(a6)
rts
Blit_CheckBlock:
movem.l d2/d3/a2/a3,-(a7)
movem.l 48(a1),d2/d3
and.l d4,d2
add.l d2,d2
and.l d4,d3
or.l d3,d2
lea 56(a1),a2
lea 48(a1),a3
moveq #0,d0
move.l d0,(a3)
waitblitt
move.w #$8640,$96(a6)
move.l a3,$4c(a6)
move.l a2,$50(a6)
move.l a3,$54(a6)
move.l #$0d3c0000,$40(a6)
move.l #$FFFFFFFF,$44(a6)
move.w #$FFFc,$62(a6)
move.l #$0000FFFC,$64(a6)
move.w #$4002,$58(a6)
waitblitt
move.l (a3),d0
and.l d4,d0
sub.l d2,d0
sne d0
movem.l (a7)+,d2/d3/a2/a3
rts